{"componentChunkName":"component---src-templates-til-template-js","path":"/til/2020-05-25-TIL /","result":{"data":{"markdownRemark":{"id":"9e21fb27-cba6-5aef-8c53-4c8595cd5c37","html":"<h2 id=\"fact\" style=\"position:relative;\"><a href=\"#fact\" aria-label=\"fact permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Fact</h2>\n<ul>\n<li>오늘 아침에 메일 풀던 알고리즘을 안 풀고 다른 공부를 했다. 그저께 온라인 코딩 테스트를 봤는데, 그때 배열에서 모든 경우들의 합을 만들었어야 했다. 시험 치고 있을 당시에 모든 경우들의 합을 만들기 위해서 공부를 하다가 시간이 다 갔다. 그래서 오늘 모든 경우들의 합을 만들기 위해서 공부를 했다. 일단 인터넷에 들어가서 사람들이 어떻게 짰는지 봤다. <a href=\"https://stackoverflow.com/questions/21640437/return-all-possible-combinations-of-numbers-in-an-array-whose-sum-is-less-than-o\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://stackoverflow.com/questions/21640437/return-all-possible-combinations-of-numbers-in-an-array-whose-sum-is-less-than-o</a> 에 있는 </li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">combinations</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">array<span class=\"token punctuation\">,</span> n</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">var</span> lists <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">M</span> <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token operator\">&lt;&lt;</span>array<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span> <span class=\"token keyword\">var</span> i <span class=\"token operator\">=</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token constant\">M</span> <span class=\"token punctuation\">;</span> <span class=\"token operator\">++</span>i <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">var</span> sublist <span class=\"token operator\">=</span> array<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">c<span class=\"token punctuation\">,</span>k</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">return</span> i<span class=\"token operator\">>></span>k <span class=\"token operator\">&amp;</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span> sublist<span class=\"token punctuation\">.</span><span class=\"token function\">reduce</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">p<span class=\"token punctuation\">,</span>c</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">return</span> p<span class=\"token operator\">+</span>c<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> n <span class=\"token punctuation\">)</span>\n            lists<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span>sublist<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> lists<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>풀이법을 봤다. 이 풀이법에서 ”>>” 또는 ”&#x3C;&#x3C;”를 써서 이진수로 바꿔서 계산하는 것이 있었다. 솔직히 말해서 이해 못 했다.</p>\n<ul>\n<li>주말에 읽었던 interface와 enum을 적용하려고 했다. interface로 domain에 있는 Todos가 가져야 할 기본 골자를 정의했다. 그리고 CommandNumbers라는 interface를 만들어서 main 파일에 todoaplication implements CommandNumber을 해서 final static int 변수 이름 = 값 들을 정의한 것을 옮겼다. 마지막으로 코어 자바 9 pg 196에 나오는 방식처럼 enum instance 안에 열거에 정의된 메서드들 오버라이드 하는 방식으로 서브 controller을 만들어 보려고 했다.</li>\n<li>프로젝트에 치명적인 버그들이 있어서 급하게 고쳤다. 레지스터 할 때 피드백이 없었던 점, 업로드할 때 예전보다 느려져서 유저 입장에서 안된 줄 알고 업로드 클릭을 엄청 많이 한다. 그것을 방지하기 위해서 업로드 누르면 업로드하는 중인 팝업창을 만들었다. 마지막으로 사진 올릴 때 최대 크기를 제한했다.</li>\n</ul>\n<h2 id=\"feeling\" style=\"position:relative;\"><a href=\"#feeling\" aria-label=\"feeling permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Feeling</h2>\n<ul>\n<li>combination 진심 너무 어렵다. 예전에 combination 짜는 문제가 있었는데 그때도 못 풀었었다. i>>k &#x26; 1 ???? 뭔 뜻이야. 다음에 다시 봐야겠다.</li>\n<li>오늘 내가 계속 짜던 java todolist에 3,4 장에 나오는 interface와 enum을 적용해 보려고 했다. 내가 제대로 짜고 있는지도 모르겠다. 그래도 일단 해보고 있는데, 잘 됐으면 좋겠다.</li>\n</ul>\n<h2 id=\"findings\" style=\"position:relative;\"><a href=\"#findings\" aria-label=\"findings permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Findings</h2>\n<ul>\n<li>인터페이스는 반드시 구현해야 하는 메서드를 명시한다. 인터페이스를 implement를 하면 인터페이스가 supertype가 되고 그 인터페이스를 구현하는 클래스는 subtype다.</li>\n<li>인터페이스에 명시해야 되는 메서드들을 넣는 것 외에도 default 메서드들을 만들어서 subtype에서 명시를 안 하는 것들의 기본 값을 정의할 수 있다. 이 default 메서드들을 override가 가능하다.</li>\n<li>cast로 변수들의 type를 강제로 변환 시킬 수 있지만 이때 type이 같아야만 변경할 수 있다. 예를 들어서 subtype를 supertype로 바꿀 때.</li>\n<li>람다는 JavaScript에 있는 arrow function이랑 비슷하다. 람다를 사용하는 핵심 목적은 지연 실행이다.</li>\n<li>클래스를 확장할 때 aClass extends bClass를 하면 된다. 이때 aClass가 sub class이고 bClass 가 super class이다. a Class가 bClass의 메서드들을 가져와서 쓸 수 있는 구조이다. </li>\n<li>abstact를 씀으로써 이 abstract class를 extend를 하는 class는 abstract class 내에 있는 abstract 메서드들을 강제로 구현하도록 할 수 있다.</li>\n<li>enum은 열거 타입을 쓸 때 쓴다. 이 열거 타입을 써서 배열처럼 쓸 수도 있고 case처럼 쓸 수도 있다.</li>\n</ul>\n<h2 id=\"future-action\" style=\"position:relative;\"><a href=\"#future-action\" aria-label=\"future action permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Future action</h2>\n<ul>\n<li>예전에 combination을 공부할 필요성을 느꼈을 때 바로 공부를 했었다면 그저께 시험에서 분명 풀 수 있었을 것이다. 필요성이 느끼면 바로바로 공부하는 게 좋다고 느껴진다. 아니면 최소한 어디에 todolist에 넣어서 시간 날 때마다 그 todo를 하나씩 체크하면서 기록하는 것도 나쁘지 않다고 생각한다.</li>\n<li>프로젝트를 다시 만지기 싫었는데 결국에 어쩔 수 없이 꼭 고쳐야 할 것 같아서 결국엔 다시 프로젝트 만지기 시작했다. 예전에 고쳐야 할 것 같던 것들을 까먹고 안 고쳐서 결국에 다시 뒤통수를 치게 됐다. 다음에는 그때그때 고치되, 못 고치거나 나중에 고쳐야 할 것들을 어디엔가 기록을 하자.</li>\n</ul>\n<h2 id=\"feedback\" style=\"position:relative;\"><a href=\"#feedback\" aria-label=\"feedback permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Feedback</h2>","fields":{"slug":"/til/2020-05-25-TIL /","tagSlugs":null},"frontmatter":{"date":"2020-05-25","description":"","tags":null,"title":"2020-05-25-TIL","socialImage":null}}},"pageContext":{"slug":"/til/2020-05-25-TIL /"}}}